package org.example;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//核心部分 JDK Proxy 代理类
class JDKProxy implements InvocationHandler {
    //真实的委托对象
    private Object target;

    public Object getInstance(Object target) {
        this.target = target;
        //获得代理对象
        return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
    }
    /**
	* @param proxy 代理对象，动态生成的代理类实例
	* @param method 被调用的方法对象，即要执行的方法，可以通过该对象获取方法的相关信息
	* @param args 方法的参数数组，这是被调用方法的参数列表。可以通过该参数获取方法的参数值
	* @return Object
	* @throws Throwable
	*/
    @Override   
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //执行委托对象的内部方法
        Object result = method.invoke(target, args);
        return result;
    }
}
